package cloud.maque.admin.impl;

import cloud.maque.admin.domain.entity.MqEnumGroup;
import cloud.maque.admin.mapper.MqEnumGroupMapper;
import cloud.maque.admin.service.MqEnumFieldService;
import cloud.maque.admin.service.MqEnumGroupService;
import cloud.maque.framework.common.request.PaginateDataResquest;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author zhuyf
 * @date 2023/3/17 16:23
 */
@Service
public class MqEnumGroupServiceImpl extends ServiceImpl<MqEnumGroupMapper, MqEnumGroup> implements MqEnumGroupService {


    @Autowired
    MqEnumFieldService fieldService;

    @Override
    public MqEnumGroup insert(MqEnumGroup group) {
        this.save(group);
        return group;
    }

    /**
     * 下面有字典字段，则不能删除
     *
     * @param groupId
     * @return
     */
    @Override
    public Boolean delete(String groupId, String tenantId) {

        if (fieldService.countByGroupId(groupId) > 0) {
            throw new RuntimeException("组下面还有字典字段，不能删除");
        }
        QueryWrapper<MqEnumGroup> wrapper = new QueryWrapper<>();
        wrapper.lambda().eq(MqEnumGroup::getTenantId, tenantId);
        wrapper.lambda().eq(MqEnumGroup::getEnumGroupId, groupId);
        return remove(wrapper);
    }

    @Override
    public PageInfo<MqEnumGroup> page(PaginateDataResquest<MqEnumGroup> pageReq) {

        PageHelper.startPage(pageReq.getPageIndex(), pageReq.getPageSize());
        QueryWrapper<MqEnumGroup> wrapper = new QueryWrapper<>();

        if (!StrUtil.isEmptyIfStr(pageReq.getData().getEnumGroupName())) {
            wrapper.lambda().like(MqEnumGroup::getEnumGroupName, pageReq.getData().getEnumGroupName());
        }

        if (!StrUtil.isEmptyIfStr(pageReq.getData().getTenantId())) {
            wrapper.lambda().eq(MqEnumGroup::getTenantId, pageReq.getData().getTenantId());
        }

        wrapper.lambda().orderByAsc(MqEnumGroup::getEnumGroupOrder);
        wrapper.lambda().orderByAsc(MqEnumGroup::getEnumGroupId);

        List<MqEnumGroup> lists = this.baseMapper.selectList(wrapper);
        PageInfo<MqEnumGroup> pageInfo = new PageInfo<>(lists);

        return pageInfo;
    }
}
